#include <bits/stdc++.h>

using uint=unsigned int;
using ll=long long;
using ull=unsigned long long;
using i128=__int128;

const int N=1e6+5;

struct game{
    int l,r;
};

bool cmp(game a,game b){
    return a.r<b.r;
}

void Solve(){
    
    return;
}

int main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr); std::cout.tie(nullptr);
    int n;
    std::cin>>n;
    std::vector<game> time(n);
    for(int i=0;i<n;i++){
        std::cin>>time[i].l>>time[i].r;
    }
    std::sort(time.begin(),time.end(),cmp);
    int ans=1;
    int lastr=time[0].r;
    for(int i=1;i<n;i++){
        if(time[i].l>=lastr){
            ans++;
            lastr=time[i].r;
        }
    }
    std::cout<<ans<<std::endl;

    return 0;
}


// 题目：线段覆盖
// 描述：
// Noip快要考试了。现在各大oj上有n个比赛，每个比赛的开始、结束的时间点是知道的。yyy认为，参加越多的比赛，noip 就能考的越好（假的）。所以，他想知道他最多能参加几个比赛。每一个比赛必须善始善终，而且不能同时参加 2个及以上的比赛。
// 输入格式
// 第一行是一个整数n，1≤n≤10^6，0≤ai<bi≤10^6。
// 接下来n行每行是2个整数ai,bi (ai<bi)，表示比赛开始、结束的时间。
// 输出格式
// 一个整数最多参加的比赛数目。
// 输入样例
// 3
// 0 2
// 2 4
// 1 3
// 输出样例
// 2